package org.csu.mypetstore.service.Impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.csu.mypetstore.domain.PO.CartItem;
import org.csu.mypetstore.domain.PO.Item;
import org.csu.mypetstore.mapper.CartItemMapper;
import org.csu.mypetstore.service.CartItemService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class CartItemServiceImpl implements CartItemService {
    @Resource
    private CartItemMapper cartItemMapper;

    public CartItemServiceImpl(){

    }

    //通过商品ID增加数量1 , pass test
//    public void incrementQuantityByItemId(String username, String itemId){
//        CartItem cartItem = getCartItemByItemIDAndUsername(itemId, username);
//        cartItem.incrementQuantity();
//        UpdateWrapper<CartItem>cartItemUpdateWrapper = new UpdateWrapper<>();
//        cartItemUpdateWrapper.eq("itemId",itemId).eq("username",username);
//        cartItemMapper.update(cartItem,cartItemUpdateWrapper);
//    }

    //查看购物车是否包括该商品 , pass test
    public boolean containItemId(String username, String itemId){
        return getCartItemByItemIDAndUsername(itemId, username) != null;
    }

    //购物车表新增一项商品  , pass test
    public void addItem(String username, Item item, boolean isInStock){
        CartItem cartItem = new CartItem();
        cartItem.setItemId(item.getItemId());
        cartItem.setUsername(username);
        cartItem.setQuantity(1);
        cartItemMapper.insert(cartItem);
    }

    //从购物车移除一项商品  , pass test
    public void removeCartItemsByItemId(String username, String itemId){
        QueryWrapper<CartItem>cartItemQueryWrapper = new QueryWrapper<>();
        cartItemQueryWrapper.eq("username",username);
        cartItemQueryWrapper.eq("itemId",itemId);
        cartItemMapper.delete(cartItemQueryWrapper);
    }

    //清空购物车  , pass test
//    public void removeAllCartItem(String username){
//        Iterator<CartItem> iterator = getCartItemList(username).iterator();
//        while (iterator.hasNext()){
//            removeCartItemsByItemId(username, iterator.next().getItemId());
//        }
//    }

    //设置商品的数量  ,  pass test
    public void setQuantityByItemId(String username, String itemId, int quantity){
        CartItem cartItem = getCartItemByItemIDAndUsername(itemId, username);
        cartItem.setQuantity(quantity);

        //更新数据库中商品数量
        UpdateWrapper<CartItem>cartItemUpdateWrapper = new UpdateWrapper<>();
        cartItemUpdateWrapper.eq("itemId",itemId).eq("username",username);
        cartItemMapper.update(cartItem,cartItemUpdateWrapper);
    }

    //得到购物车商品清单  ,  pass test
    public List<CartItem> getCartItemList(String username){
        //从cartitem表中获数据
        QueryWrapper<CartItem>cartItemQueryWrapper = new QueryWrapper<>();
        cartItemQueryWrapper.eq("username",username);
        List<CartItem> list = cartItemMapper.selectList(cartItemQueryWrapper);
        //为购物车中的物品添加item
//        Iterator<CartItem>iterator = list.listIterator();
//        while(iterator.hasNext()){
//            CartItem cartItem = iterator.next();
//            cartItem.setItemId(catalogService.getItem(cartItem.getItemId()));
//        }
        return list;
    }

    //得到总数  ,  pass test
//    public BigDecimal getSubTotal(String username){
//        List<CartItem> list = getCartItemList(username);
//        BigDecimal sum = new BigDecimal(0);
//        Iterator<CartItem> iterator = list.iterator();
//        while (iterator.hasNext()){
//            sum = sum.add(iterator.next().getTotal());
//        }
//        return sum;
//    }

//    //得到相应的item项
//    private void getItem(String username, CartItem cartItem){
//        boolean isInStock = catalogService.isItemInStock(cartItem.getItemId());
//        Item item = catalogService.getItem(cartItem.getItemId());
//        cartItem.setItem(item);
//    }

    //通过itemId和username获取cartItem  ,  pass test
    public CartItem getCartItemByItemIDAndUsername(String itemId, String username){
        QueryWrapper<CartItem>cartItemQueryWrapper = new QueryWrapper<>();
        cartItemQueryWrapper.eq("itemId",itemId).eq("username",username);
        return cartItemMapper.selectOne(cartItemQueryWrapper);
    }
}
